package com.example.hutool;

import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateRange;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;

import java.util.Calendar;
import java.util.Date;

/**
 * @author 江黎
 * @since 2022-11-22
 */
public class 日期工具类 {

    public static void main(String[] args) {
        /*日期格式化*/
        // 1、format：格式化日期【自定义日期格式】
        DateUtil.format(new Date(), "yyyy年MM月dd日 HH时mm分ss秒"); // 2022年11月22日 09时28分16秒
        // 2、formatDate：格式化日期【yyyy-MM-dd】
        DateUtil.formatDate(new Date()); // 2022-11-22
        // 3、formatDateTime：格式化日期【yyyy-MM-dd HH:mm:ss】
        DateUtil.formatDateTime(new Date()); // 2022-11-22 09:29:03

        /*日期解析*/
        // 1、parse：解析日期【自定义日期格式】
        DateUtil.parse("2022年11月22日 09时28分16秒", "yyyy年MM月dd日 HH时mm分ss秒");
        // 2、parseDate：解析日期【yyyy-MM-dd】
        DateUtil.parseDate("2022-11-22");
        // 3、parseDateTime：解析日期【yyyy-MM-dd HH:mm:ss】
        DateUtil.parseDate("2022-11-22 09:29:03");

        /*日期偏移*/
        // 1、offsetMillisecond 偏移毫秒
        // 2、offsetSecond 偏移秒
        // 3、offsetMinute 偏移分钟
        // 4、offsetHour 偏移小时
        // 5、offsetDay 偏移天
        DateUtil.offsetDay(new Date(), 1);
        DateUtil.offsetDay(new Date(), -1);
        // 6、offsetWeek 偏移星期
        // 7、offsetMonth 偏移月

        /*两个时间直接的时长, 参数isReset：是否忽略不足一个计算单位的部分*/
        // 1、betweenMs 计算两个日期相差的毫秒数
        // 2、betweenDay 计算两个日期相差的天数
        Date begin = DateUtil.parseDateTime("2022-09-30 23:59:59");
        Date end = DateUtil.parseDateTime("2022-10-01 00:00:00");
        DateUtil.betweenDay(begin, end, true); // 1
        DateUtil.betweenDay(begin, end, false); // 0
        // 3、betweenWeek 计算两个日期相差的星期数
        // 4、betweenMonth 计算两个日期相差的月数
        // 5、betweenYear 计算两个日期相差的年数

        /*日期开始时间与结束时间*/
        // 1、beginOfSecond 秒开始  endOfSecond 秒结尾
        // 2、beginOfMinute 分开始  endOfMinute 分结尾
        // 3、beginOfHour 小时开始  endOfHour 小时结尾
        // 4、beginOfDay 天开始     endOfDay 天结尾
        // 5、beginOfWeek 周开始    endOfWeek 周结尾
        // 6、beginOfMonth 月开始   endOfMonth 月结尾
        // 7、beginOfYear 年开始    endOfYear 年结尾

        /*生成指定时间*/
        Calendar calendar = Calendar.getInstance();
        calendar.set(2023, 9, 23, 17, 30, 00);
        Date date = calendar.getTime();
        System.out.println(date);

        // 时间区间
        DateTime start = DateUtil.parse("2023-09-30");
        DateTime end1 = DateUtil.parse("2023-10-31");
        DateRange range = DateUtil.range(start, end1, DateField.DAY_OF_YEAR);
        for (DateTime dateTime : range) {
            System.out.println(DateUtil.formatDate(dateTime));
        }

        System.out.println(DateUtil.beginOfDay(new Date()).toString());

    }
}
